import UIKit

/**
 B站：https://www.bilibili.com/video/BV144411C7Gg?p=13
 
 第13课
 
 Dictionary集合 （无序）
 
    1. 定义
 */

// 定义
let a:Dictionary<String, String> = ["a": "A", "b": "B"]
print(a)
let aa = ["name": "srx", "age": 18] as [String : Any]
print(aa)

// 不可取 - 错误
//let aaa = [1: 2, 2: "srx", "age": 18] as [Any : Any]
//print(aaa)

print(type(of: a))
print(type(of: aa))


let b:[Int: String] = [1: "2", 2: "name"]
print(b)

let c = [1: "2", 2: "name"]
print(c)

//let d = [String: Any]()
//print(d)

let e:Dictionary<Int, String> = [Int: String]()
print(e)

// 错误
//let f:Dictionary<Any, String> = [Any: String]()
//print(f)

/**
 
 总结： 定义Dictionary
 
 1. = 前，可以没有数据类型， = 后必须有 数据类型 (如前后都有定义，必须一致)
 2. key 不能是 Int、Any(不能是 Hashable)
 */
//--------------------------------------------------------------------------
var dict:Dictionary<String, String> = ["a": "A", "b": "B", "c": "C", "d": "D"]
print("\n---- 长度 -----")
print("Dict 长度", dict.count)

//-------------------------------------
print("\n---- 取值/查找 -----")
// 处理 option
print("Dict 取值", dict["a"] ?? "unknow")

print("Dict 取值", dict["a123"] ?? "unknow")

//-------------------------------------
print("\n---- 修改 -----")
dict["a"] = "AAA"
print(dict)

//-------------------------------------
print("\n---- 增加 -----")
dict["srx"] = "SRXBOYS"
print(dict)

//dict.updateValue(T##value: String##String, forKey: T##String)
dict.updateValue("xx", forKey: "ios")
print(dict)

dict.updateValue("kk", forKey: "ios")
print(dict)
//updateValue 中的key, 在dict里 就修改，不在 就增加


//-------------------------------------
print("\n---- 删除 -----")
dict.removeValue(forKey: "ios")
print(dict)


//dict.remove(at: Dictionary<String, String>.Index)
let rmIndex = dict.index(forKey: "c");
if (rmIndex != nil) { // 解析可选类型
    
    // https://blog.csdn.net/ciermao3056/article/details/100778036
    // https://swift.gg/2016/01/25/friday-qa-2015-11-06-why-is-swifts-string-api-so-hard/
    
    print("\n无需关心， 看下index结构:", rmIndex!)
    dict.remove(at: rmIndex!)
    print(dict)
}
